<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        var o ={
            name:'andy'
        }
        function fn(a,b){
            console.log(this);
            console.log(a+b);
            
        }
        //call第一个可以调用函数，第二个可以改变函数内的this指向
        //call主要作用可以实现继承，详情见call.html
        fn.call(o,1,2)
        //apply的作用和call相同
        //但是apply的参数必须是数组形式的
        //apply主要应用于数组
        fn.apply(o,[1,2])
        //例如
        var arr=[1,66,3,99,4]
        var max=Math.max.apply(Math,arr)
        // var max=Math.max(...arr)
        console.log(max);
        
        //bind()也可以改变函数内部this指向，但不会调用函数
        //bind事实上是返回了一个拷贝了原函数的新函数
        //新函数的this指向发生了改变
        //原函数的this指向没有改变
        //重点方法
        var f=fn.bind(o)
        f()
    </script>
</body>
</html>